/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package modulos.nota.vista;

import basedatos.OperacionesBD;
import java.util.ArrayList;
import javax.swing.JTable;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import modulos.nota.modelo.Nota;
import modulos.usuario.modelo.Usuario;
import vista.frmPrincipal;
import vista.modelo.Mensaje;
import vista.modelo.OperacionesVarias;

/**
 *
 * @author francisco
 */
public class FrmMensajes extends javax.swing.JInternalFrame implements ListSelectionListener {

    /**
     * Creates new form FrmMensajes
     */
    public FrmMensajes() {
        OperacionesVarias.centrar(this);
        initComponents();
        listarRecibidos();
        poneTablaBandejaEntrada(notasRecibidas);
        listarEnviados();
        poneTablaBandejaSlida(notasEnviadas);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jTabbedPane1 = new javax.swing.JTabbedPane();
        pnlBandejaEntrada = new javax.swing.JPanel();
        jScrollPane2 = new javax.swing.JScrollPane();
        tblBandejaEntrada = new JTable() {
            public boolean isCellEditable(int rowIndex, int vColIndex) {
                return false;
            }
        };
        tblBandejaEntrada.getSelectionModel().addListSelectionListener(this);
        pnlBandejadeSalida = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        tblBandejaSalida = new JTable() {
            public boolean isCellEditable(int rowIndex, int vColIndex) {
                return false;
            }
        };
        tblBandejaSalida.getSelectionModel().addListSelectionListener(this);
        lblDe = new javax.swing.JLabel();
        txtDe = new javax.swing.JTextField();
        jScrollPane3 = new javax.swing.JScrollPane();
        textoDetalle = new javax.swing.JTextArea();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();

        setClosable(true);
        setTitle("NOTAS");
        getContentPane().setLayout(null);

        jTabbedPane1.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                jTabbedPane1StateChanged(evt);
            }
        });

        tblBandejaEntrada.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {},
                {},
                {},
                {}
            },
            new String [] {

            }
        ));
        jScrollPane2.setViewportView(tblBandejaEntrada);

        javax.swing.GroupLayout pnlBandejaEntradaLayout = new javax.swing.GroupLayout(pnlBandejaEntrada);
        pnlBandejaEntrada.setLayout(pnlBandejaEntradaLayout);
        pnlBandejaEntradaLayout.setHorizontalGroup(
            pnlBandejaEntradaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 592, Short.MAX_VALUE)
        );
        pnlBandejaEntradaLayout.setVerticalGroup(
            pnlBandejaEntradaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlBandejaEntradaLayout.createSequentialGroup()
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 157, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, Short.MAX_VALUE))
        );

        jTabbedPane1.addTab("Bandeja de Entrada", pnlBandejaEntrada);

        tblBandejaSalida.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {},
                {},
                {},
                {}
            },
            new String [] {

            }
        ));
        jScrollPane1.setViewportView(tblBandejaSalida);

        javax.swing.GroupLayout pnlBandejadeSalidaLayout = new javax.swing.GroupLayout(pnlBandejadeSalida);
        pnlBandejadeSalida.setLayout(pnlBandejadeSalidaLayout);
        pnlBandejadeSalidaLayout.setHorizontalGroup(
            pnlBandejadeSalidaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 592, Short.MAX_VALUE)
        );
        pnlBandejadeSalidaLayout.setVerticalGroup(
            pnlBandejadeSalidaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlBandejadeSalidaLayout.createSequentialGroup()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 157, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, Short.MAX_VALUE))
        );

        jTabbedPane1.addTab("Bandeja de Salida", pnlBandejadeSalida);

        getContentPane().add(jTabbedPane1);
        jTabbedPane1.setBounds(12, 22, 600, 190);

        lblDe.setText("   De:");
        getContentPane().add(lblDe);
        lblDe.setBounds(20, 220, 80, 30);
        getContentPane().add(txtDe);
        txtDe.setBounds(80, 220, 250, 30);

        textoDetalle.setColumns(20);
        textoDetalle.setRows(5);
        jScrollPane3.setViewportView(textoDetalle);

        getContentPane().add(jScrollPane3);
        jScrollPane3.setBounds(20, 260, 590, 100);

        jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/jpgs/agt_home.png"))); // NOI18N
        jButton1.setText("Cerrar");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton1);
        jButton1.setBounds(510, 380, 100, 27);

        jButton2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/jpgs/add.png"))); // NOI18N
        jButton2.setText("Nuevo");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton2);
        jButton2.setBounds(20, 380, 90, 27);

        jButton3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/jpgs/delete.png"))); // NOI18N
        jButton3.setText("Eliminar");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton3);
        jButton3.setBounds(120, 380, 100, 27);

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-644)/2, (screenSize.height-448)/2, 644, 448);
    }// </editor-fold>//GEN-END:initComponents

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        dispose();
    }//GEN-LAST:event_jButton1ActionPerformed

    private void jTabbedPane1StateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_jTabbedPane1StateChanged
        tipo = jTabbedPane1.getSelectedIndex();
        if (tipo == 0) {
            tblBandejaSalida.clearSelection();
            lblDe.setText("De:");
        } else {
            tblBandejaEntrada.clearSelection();
            lblDe.setText("Para:");
        }
        txtDe.setText("");
        textoDetalle.setText("");

    }//GEN-LAST:event_jTabbedPane1StateChanged

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
        FrmNotas Fn = new FrmNotas(true);
        frmPrincipal.dskpPrincipal.add(Fn);
        Fn.toFront();
        Fn.setVisible(true);
    }//GEN-LAST:event_jButton2ActionPerformed

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed

        if (tblBandejaEntrada.isShowing()) {
            int row = tblBandejaEntrada.getSelectedRow();
            Nota n = notasRecibidas.get(row);
            if (n.getEstado().equals(FrmNotas.ENVIADO_RECIBIDO)) {
                n.setEstado(FrmNotas.ENVIADO);
            } else if (n.getEstado().equals(FrmNotas.ENVIADO)) {
                n.setEstado(FrmNotas.NINGUNO);
            }
            if (OperacionesBD.modificar(n)) {
                Mensaje.datosEliminados();
                notasRecibidas.remove(n);
                poneTablaBandejaEntrada(notasRecibidas);
                txtDe.setText("");
                textoDetalle.setText("");
            } else {
                Mensaje.datosNoEliminados();
            }
        } else if (tblBandejaSalida.isShowing()) {
            int row = tblBandejaSalida.getSelectedRow();
            Nota n = notasEnviadas.get(row);
            if (n.getEstado().equals(FrmNotas.ENVIADO_RECIBIDO)) {
                n.setEstado(FrmNotas.RECIBIDO);
            } else if (n.getEstado().equals(FrmNotas.RECIBIDO)) {
                n.setEstado(FrmNotas.NINGUNO);
            }

            if (OperacionesBD.modificar(n)) {
                Mensaje.datosEliminados();
                notasEnviadas.remove(n);
                poneTablaBandejaSlida(notasEnviadas);
                txtDe.setText("");
                textoDetalle.setText("");
            } else {
                Mensaje.datosNoEliminados();
            }
        }
    }//GEN-LAST:event_jButton3ActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JLabel lblDe;
    private javax.swing.JPanel pnlBandejaEntrada;
    private javax.swing.JPanel pnlBandejadeSalida;
    private javax.swing.JTable tblBandejaEntrada;
    public static javax.swing.JTable tblBandejaSalida;
    private javax.swing.JTextArea textoDetalle;
    private javax.swing.JTextField txtDe;
    // End of variables declaration//GEN-END:variables
    private ArrayList<Nota> notasRecibidas;
    public static ArrayList<Nota> notasEnviadas;
    private int tipo = 0;
    Usuario logueado = (Usuario) frmPrincipal.UsuarioLogueado.get(0)[1];
    private int filaEntrada = 0;
    private int filaSalida = 0;

    private void listarEnviados() {
        notasEnviadas = (ArrayList<Nota>) OperacionesBD.listarconCondicion("Nota", "idRemitente", logueado.getIdPersona() + "");

    }

    private void listarRecibidos() {
        notasRecibidas = (ArrayList<Nota>) OperacionesBD.listarPorUsuario("Nota", logueado);
    }

    private void poneTablaBandejaEntrada(ArrayList<Nota> lista) {
        if (notasRecibidas != null) {
            DefaultTableModel dtm = new DefaultTableModel();
            dtm.addColumn("Titulo");
            dtm.addColumn("Fecha");
            for (Nota s : notasRecibidas) {
                if (s.getEstado().equals(FrmNotas.ENVIADO_RECIBIDO) || s.getEstado().equals(FrmNotas.RECIBIDO)) {
                    Object[] obj = new Object[2];
                    obj[0] = s.getTitulo();
                    obj[1] = OperacionesVarias.fechaString(s.getFecha().getTime());
                    dtm.addRow(obj);
                }
            }
            tblBandejaEntrada.setModel(dtm);
        }

    }

    public static void poneTablaBandejaSlida(ArrayList<Nota> lista) {
        if (notasEnviadas != null) {
            DefaultTableModel dtm = new DefaultTableModel();
            dtm.addColumn("Titulo");
            dtm.addColumn("Fecha");
            for (Nota s : notasEnviadas) {
                if (s.getEstado().equals(FrmNotas.ENVIADO_RECIBIDO) || s.getEstado().equals(FrmNotas.ENVIADO)) {
                    Object[] obj = new Object[2];
                    obj[0] = s.getTitulo();
                    obj[1] = OperacionesVarias.fechaString(s.getFecha().getTime());
                    dtm.addRow(obj);
                }
            }
            tblBandejaSalida.setModel(dtm);
        }
    }

    @Override
    public void valueChanged(ListSelectionEvent e) {
        if (tipo == 0) {//Si es la tabla de la bandeja de entrada
            filaEntrada = tblBandejaEntrada.getSelectedRow();
            if (filaEntrada >= 0) {
                Nota s = devuelveNota(String.valueOf(tblBandejaEntrada.getValueAt(filaEntrada, 0)), notasRecibidas);
                Usuario u = (Usuario) OperacionesBD.buscar("Usuario", "idPersona", s.getIdRemitente() + "");
                txtDe.setText(u.getNombre());
                textoDetalle.setText(s.getDescripcion());
            }
        } else if (tipo == 1) {
            filaSalida = tblBandejaSalida.getSelectedRow();
            if (filaSalida >= 0) {
                Nota s = devuelveNota(String.valueOf(tblBandejaSalida.getValueAt(filaSalida, 0)), notasEnviadas);
                txtDe.setText(s.getDestinatario().getNombre());
                textoDetalle.setText(s.getDescripcion());
            }
        }

    }

    public Nota devuelveNota(String titulo, ArrayList<Nota> listaBusqueda) {
        Nota t = null;
        for (Nota n : listaBusqueda) {
            if (n.getTitulo().equals(titulo) && !n.getEstado().equals(FrmNotas.NINGUNO)) {
                t = n;
            }
        }
        return t;
    }
}
